﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSysWeb;
using System.Data.SqlClient;
using System.Data;

namespace DAL_MechSysWeb
{
    public class DALNoticia : DALBase
    {
        private DTONoticia CriarNoticia(SqlDataReader sqlDataReader)
        {
            try
            {
                DTONoticia dtoNoticia = new DTONoticia();

                if (!string.IsNullOrEmpty(sqlDataReader["NoticiaID"].ToString()))
                {
                    dtoNoticia.NoticiaID = (int)sqlDataReader["NoticiaID"];
                }             

                if (!string.IsNullOrEmpty(sqlDataReader["Titulo"].ToString()))
                {
                    dtoNoticia.Titulo = (string)sqlDataReader["Titulo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Resumo"].ToString()))
                {
                    dtoNoticia.Resumo = (string)sqlDataReader["Resumo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Texto"].ToString()))
                {
                    dtoNoticia.Texto = (string)sqlDataReader["Texto"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Imagem"].ToString()))
                {
                    dtoNoticia.Imagem = (byte[])sqlDataReader["Imagem"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteEspecifico"].ToString()))
                {
                    dtoNoticia.ClienteEspecifico = (bool)sqlDataReader["ClienteEspecifico"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoNoticia.ClienteID = (string)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["AtribuiVencimento"].ToString()))
                {
                    dtoNoticia.AtribuiVencimento = (bool)sqlDataReader["AtribuiVencimento"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataInicio"].ToString()))
                {
                    dtoNoticia.DataInicio = (DateTime)sqlDataReader["DataInicio"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataFinal"].ToString()))
                {
                    dtoNoticia.DataFinal = (DateTime)sqlDataReader["DataFinal"];
                }

                return dtoNoticia;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTONoticia dtoNoticia)
        {
            try
            {
                string storedProssidere = "sp_Web_InserirNoticia";
                SqlParameter[] parameters =                
                {        
                   
                   new SqlParameter("@titulo", dtoNoticia.Titulo),
                   new SqlParameter("@resumo", dtoNoticia.Resumo),
                   new SqlParameter("@texto", dtoNoticia.Texto),
                   new SqlParameter("@imagem", dtoNoticia.Imagem),
                   new SqlParameter("@clienteEspecifico", dtoNoticia.ClienteEspecifico),                       
                   new SqlParameter("@clienteID", dtoNoticia.ClienteID),
                   new SqlParameter("@atribuiVencimento", dtoNoticia.AtribuiVencimento),
                   new SqlParameter("@dataInicial", dtoNoticia.DataInicio),
                   new SqlParameter("@dataFinal", dtoNoticia.DataFinal),   
                   new SqlParameter("@dataRegistro", DateTime.Now)    

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Atualizar(DTONoticia dtoNoticia)
        {
            try
            {
                string storedProssidere = "sp_Web_AtualizarNoticia";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@noticiaID", dtoNoticia.NoticiaID),                          
                           new SqlParameter("@titulo", dtoNoticia.Titulo),
                           new SqlParameter("@resumo", dtoNoticia.Resumo),
                           new SqlParameter("@texto", dtoNoticia.Texto),
                           new SqlParameter("@imagem", dtoNoticia.Imagem),
                           new SqlParameter("@clienteEspecifico", dtoNoticia.ClienteEspecifico),                       
                           new SqlParameter("@clienteID", dtoNoticia.ClienteID),
                           new SqlParameter("@atribuiVencimento", dtoNoticia.AtribuiVencimento),
                           new SqlParameter("@dataInicial", dtoNoticia.DataInicio),
                           new SqlParameter("@dataFinal", dtoNoticia.DataFinal),   
                           new SqlParameter("@dataRegistro", DateTime.Now)    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int noticiaID)
        {
            try
            {
                string storedProssidere = "sp_Web_ExcluirNoticia";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@noticiaID", noticiaID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public int BuscarUltimoNoticiaID()
        {
            try
            {
                int idCorrente = -1;

                string storedProssidere = "sp_BuscarUltimoNoticiaID";

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    if (sqlDataReader.Read())
                    {
                        idCorrente = Int32.Parse(sqlDataReader["IDCorrente"].ToString());
                    }
                }

                return idCorrente;
            }
            catch (SqlException)
            {
                throw;
            }
        }

        public DTONoticia BuscarNoticiaPorNoticiaID(int noticiaID)
        {
            DTONoticia dtoNoticia = null;

            try
            {
                string storedProssidere = "sp_Web_BuscarNoticiaPorNoticiaID";
                SqlParameter[] parameters =
                        {                    
                           new SqlParameter("@noticiaID", noticiaID)                                    
                        };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {

                        dtoNoticia = CriarNoticia(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return dtoNoticia;
        }        

        public List<DTONoticia> BuscarNoticiasCadastradas(int registroInicio, int tamanhoPagina, string tipo)
        {
            List<DTONoticia> lstNoticias = new List<DTONoticia>();

            DataTable dataTable = new DataTable();

            try
            {
                string storedProcedure = "sp_Web_BuscarNoticiasCadastradas";
                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(storedProcedure, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTONoticia dtoNoticia = new DTONoticia();

                            if (!dataTable.Rows[i].IsNull("NoticiaID"))
                            {
                                dtoNoticia.NoticiaID = (int)dataTable.Rows[i]["NoticiaID"];
                            }                           
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoNoticia.Titulo = (string)dataTable.Rows[i]["Titulo"];
                            }
                            if (!dataTable.Rows[i].IsNull("Resumo"))
                            {
                                dtoNoticia.Resumo = (string)dataTable.Rows[i]["Resumo"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteEspecifico"))
                            {
                                dtoNoticia.ClienteEspecifico = (bool)dataTable.Rows[i]["ClienteEspecifico"];
                            }
                            if (!dataTable.Rows[i].IsNull("AtribuiVencimento"))
                            {
                                dtoNoticia.AtribuiVencimento = (bool)dataTable.Rows[i]["AtribuiVencimento"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataInicio"))
                            {
                                dtoNoticia.DataInicio = (DateTime)dataTable.Rows[i]["DataInicio"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataFinal"))
                            {
                                dtoNoticia.DataFinal = (DateTime)dataTable.Rows[i]["DataFinal"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataRegistro"))
                            {
                                dtoNoticia.DataRegistro = (DateTime)dataTable.Rows[i]["DataRegistro"];
                            }

                            lstNoticias.Add(dtoNoticia);
                        }


                    }
                    sqlConnection.Close();
                }
            }
            catch (SqlException)
            {
            }
            return lstNoticias;
        }

        public List<DTONoticia> BuscarNoticiasPorData(int registroInicio, int tamanhoPagina, string tipo, DateTime data)
        {
            List<DTONoticia> lstNoticias = new List<DTONoticia>();

            DataTable dataTable = new DataTable();

            try
            {
                string query = "sp_Web_BuscarNoticiasPorData";

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTONoticia dtoNoticia = new DTONoticia();


                            if (!dataTable.Rows[i].IsNull("NoticiaID"))
                            {
                                dtoNoticia.NoticiaID = (int)dataTable.Rows[i]["NoticiaID"];
                            }                          
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoNoticia.Titulo = (string)dataTable.Rows[i]["Titulo"];
                            }
                            if (!dataTable.Rows[i].IsNull("Resumo"))
                            {
                                dtoNoticia.Resumo = (string)dataTable.Rows[i]["Resumo"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteEspecifico"))
                            {
                                dtoNoticia.ClienteEspecifico = (bool)dataTable.Rows[i]["ClienteEspecifico"];
                            }
                            if (!dataTable.Rows[i].IsNull("AtribuiVencimento"))
                            {
                                dtoNoticia.AtribuiVencimento = (bool)dataTable.Rows[i]["AtribuiVencimento"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataInicio"))
                            {
                                dtoNoticia.DataInicio = (DateTime)dataTable.Rows[i]["DataInicio"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataFinal"))
                            {
                                dtoNoticia.DataFinal = (DateTime)dataTable.Rows[i]["DataFinal"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataRegistro"))
                            {
                                dtoNoticia.DataRegistro = (DateTime)dataTable.Rows[i]["DataRegistro"];
                            }

                            lstNoticias.Add(dtoNoticia);
                        }

                    }
                    sqlConnection.Close();
                }

            }
            catch (SqlException)
            {

            }
            return lstNoticias;
        }   

        public List<DTONoticia> BuscarNoticiasPorClienteID(int registroInicio, int tamanhoPagina, string tipo, int clienteID)
        {
            List<DTONoticia> lstNoticias = new List<DTONoticia>();

            DataTable dataTable = new DataTable();

            try
            {
                string query = "sp_Web_BuscarNoticiasPorClienteID";

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTONoticia dtoNoticia = new DTONoticia();

                            if (!dataTable.Rows[i].IsNull("NoticiaID"))
                            {
                                dtoNoticia.NoticiaID = (int)dataTable.Rows[i]["NoticiaID"];
                            }                            
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoNoticia.Titulo = (string)dataTable.Rows[i]["Titulo"];
                            }
                            if (!dataTable.Rows[i].IsNull("Resumo"))
                            {
                                dtoNoticia.Resumo = (string)dataTable.Rows[i]["Resumo"];
                            }
                            if (!dataTable.Rows[i].IsNull("Texto"))
                            {
                                dtoNoticia.Texto = (string)dataTable.Rows[i]["Texto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Imagem"))
                            {
                                dtoNoticia.Imagem = (byte[])dataTable.Rows[i]["Imagem"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteEspecifico"))
                            {
                                dtoNoticia.ClienteEspecifico = (bool)dataTable.Rows[i]["ClienteEspecifico"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteID"))
                            {
                                dtoNoticia.ClienteID = (string)dataTable.Rows[i]["ClienteID"];
                            }
                            if (!dataTable.Rows[i].IsNull("AtribuiVencimento"))
                            {
                                dtoNoticia.AtribuiVencimento = (bool)dataTable.Rows[i]["AtribuiVencimento"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataInicio"))
                            {
                                dtoNoticia.DataInicio = (DateTime)dataTable.Rows[i]["DataInicio"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataFinal"))
                            {
                                dtoNoticia.DataFinal = (DateTime)dataTable.Rows[i]["DataFinal"];
                            }
                            if (!dataTable.Rows[i].IsNull("DataRegistro"))
                            {
                                dtoNoticia.DataRegistro = (DateTime)dataTable.Rows[i]["DataRegistro"];
                            }
                            
                            lstNoticias.Add(dtoNoticia);
                        }

                    }
                    sqlConnection.Close();
                }

            }
            catch (SqlException)
            {

            }
            return lstNoticias;
        }
    }
}
